package com.nicolas.pattern.iterator;

import java.util.List;

/**
 * ConcreteIterator（具体迭代器）：它实现了抽象迭代器接口，完成对聚合对象的遍历，
 * 同时在具体迭代器中通过游标来记录在聚合对象中所处的当前位置，
 * 在具体实现时，游标通常是一个表示位置的非负整数。
 * @author nicolas  2017年2月12日 -- 下午8:46:39
 * 商品迭代器：具体迭代器
 */
public class ProductIterator implements AbstractIterator {  
    private ProductList productList;  
    private List products;  
    private int cursor1; //定义一个游标，用于记录正向遍历的位置  
    private int cursor2; //定义一个游标，用于记录逆向遍历的位置  
      
    public ProductIterator(ProductList list) {  
        this.productList = list;  
        this.products = list.getObjects(); //获取集合对象  
        cursor1 = 0; //设置正向遍历游标的初始值  
        cursor2 = products.size() -1; //设置逆向遍历游标的初始值  
    }  
      
    public void next() {  
        if(cursor1 < products.size()) {  
            cursor1++;  
        }  
    }  
      
    public boolean isLast() {  
        return (cursor1 == products.size());  
    }  
      
    public void previous() {  
        if (cursor2 > -1) {  
            cursor2--;  
        }  
    }  
      
    public boolean isFirst() {  
        return (cursor2 == -1);  
    }  
      
    public Object getNextItem() {  
        return products.get(cursor1);  
    }   
          
    public Object getPreviousItem() {  
        return products.get(cursor2);  
    }     
}
